package queue.Leetcode;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;

/**
 * 双队列实现栈。q1和q2
 * 其中q1永远是保存元素，栈的pop就是q1的poll，栈的peek就是q1的peek，栈的push就是q1的offer
 * 当添加元素时，新元素入q2，然后让q1的元素一次弹出入q2，最后交换q1和q2
 */
public class Num225 {
    // q1永远是保存元素的队列
    private Queue<Integer> q1 = new LinkedList<>();
    // q2作为辅助队列，新元素直接入q2
    private Queue<Integer> q2 = new LinkedList<>();
    public void push(int x) {
        // 新元素直接入q2
        q2.offer(x);
        // 将老元素依次出队1，入队2
        while (!q1.isEmpty()) {
            q2.offer(q1.poll());
        }
        // 交换q1和q2的名称
        Queue<Integer> temp = q1;
        q1 = q2;
        q2 = temp;
    }

    public int pop() {
        return q1.poll();
    }

    public int top() {
        return q1.peek();
    }

    public boolean empty() {
        return q1.isEmpty();
    }
}